<?php
namespace plugin\ky_black\app\admin\controller;

use support\Request;
use support\Response;
use plugin\ky_black\app\admin\model\User;
use plugin\ky_black\app\admin\model\Organization;

class MemberController extends BaseController
{
    /**
     * 会员列表
     */
    public function list(Request $request): Response
    {
        $page = (int)$request->input('page', 1);
        $pageSize = (int)$request->input('limit', 15);
        $keyword = $request->input('keyword', '');
        $type = $request->input('type', '');
        $status = $request->input('status', '');

        // 使用 join 查询以提高性能
        $query = User::select('ky_user.*', 'o.company_name as org_name')
            ->leftJoin('ky_organization as o', 'ky_user.org_id', '=', 'o.org_id');

        // 关键词搜索（姓名或手机号）
        if ($keyword) {
            $query->where(function ($q) use ($keyword) {
                $q->where('ky_user.name', 'like', "%{$keyword}%")
                  ->orWhere('ky_user.phone', 'like', "%{$keyword}%");
            });
        }

        // 用户类型
        if ($type) {
            $query->where('ky_user.type', $type);
        }

        // 状态
        if ($status !== '') {
            $query->where('ky_user.status', (int)$status);
        }

        $total = $query->count();
        $list = $query->orderBy('ky_user.user_id', 'desc')
            ->offset(($page - 1) * $pageSize)
            ->limit($pageSize)
            ->get();

        return $this->success([
            'list' => $list,
            'total' => $total
        ]);
    }

    /**
     * 获取会员详情
     */
    public function detail(Request $request): Response
    {
        $id = $request->input('id');
        if (!$id) {
            return $this->error('参数错误');
        }

        $user = User::with('organization')->find($id);
        if (!$user) {
            return $this->error('会员不存在');
        }

        return $this->success($user);
    }

    /**
     * 创建会员
     */
    public function create(Request $request): Response
    {
        $data = $request->post();
        
        // 验证手机号是否已存在
        if (User::where('phone', $data['phone'])->exists()) {
            return $this->error('手机号已存在');
        }

        // 验证身份证号是否已存在（如果提供了身份证号）
        if (!empty($data['id_card']) && User::where('id_card', $data['id_card'])->exists()) {
            return $this->error('身份证号已存在');
        }

        // 如果是机构用户，验证机构是否存在
        if ($data['type'] === 'organization' && !empty($data['org_id'])) {
            if (!Organization::find($data['org_id'])) {
                return $this->error('所选机构不存在');
            }
        }

        try {
            $user = User::create($data);
            return $this->success($user, '创建成功');
        } catch (\Exception $e) {
            return $this->error('创建失败：' . $e->getMessage());
        }
    }

    /**
     * 更新会员信息
     */
    public function update(Request $request): Response
    {
        $id = $request->input('id');
        $data = $request->post();

        if (!$id) {
            return $this->error('参数错误');
        }

        $user = User::find($id);
        if (!$user) {
            return $this->error('会员不存在');
        }

        // 验证手机号是否已被其他用户使用
        if (isset($data['phone']) && $data['phone'] !== $user->phone) {
            if (User::where('phone', $data['phone'])->where('user_id', '!=', $id)->exists()) {
                return $this->error('手机号已存在');
            }
        }

        // 验证身份证号是否已被其他用户使用
        if (!empty($data['id_card']) && $data['id_card'] !== $user->id_card) {
            if (User::where('id_card', $data['id_card'])->where('user_id', '!=', $id)->exists()) {
                return $this->error('身份证号已存在');
            }
        }

        // 如果是机构用户，验证机构是否存在
        if (isset($data['type']) && $data['type'] === 'organization' && !empty($data['org_id'])) {
            if (!Organization::find($data['org_id'])) {
                return $this->error('所选机构不存在');
            }
        }

        try {
            $user->update($data);
            return $this->success($user, '更新成功');
        } catch (\Exception $e) {
            return $this->error('更新失败：' . $e->getMessage());
        }
    }

    /**
     * 更新会员状态
     */
    public function updateStatus(Request $request): Response
    {
        $id = $request->input('id');
        $status = $request->input('status');

        if (!$id || !in_array($status, [0, 1])) {
            return $this->error('参数错误');
        }

        $user = User::find($id);
        if (!$user) {
            return $this->error('会员不存在');
        }

        try {
            $user->update(['status' => $status]);
            return $this->success(null, '状态更新成功');
        } catch (\Exception $e) {
            return $this->error('状态更新失败：' . $e->getMessage());
        }
    }
} 